package com.gov.ec.rsv.igm;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.primefaces.event.SelectEvent;

import com.gov.ec.rsv.interfaces.ICrudDao;
import com.gov.ec.rsv.modelo.Auditoria;
import com.gov.ec.rsv.modelo.Cliente;
import com.gov.ec.rsv.modelo.Institucion;
import com.gov.ec.rsv.util.FacesUtil;
import com.gov.ec.rsv.util.PrimeFaceUtil;


public class ClienteBean extends FacesUtil{

	private Boolean perEditar;
	private Boolean perGuardar;
	private Boolean perEliminar;
	
	 /** La variable Cliente. */
    private Cliente cliente;
    private List<Cliente> listaCliente;
    private List<SelectItem> listaInstitucionSel;
    private Cliente clienteSel;
    private Auditoria auditoria;
    private Institucion institucionSel;
    private String idInst;
	
    @EJB(name = "adminCrud/local")
	private ICrudDao adminCrud;

	/**
	 * 
	 * @throws NamingException 
	 */
	public ClienteBean() throws NamingException  {
		this.cliente = new Cliente();
		//this.institucionSel = new Institucion();
		this.listaInstitucionSel= new ArrayList<SelectItem>();
		InitialContext ic = new InitialContext();
		adminCrud= (ICrudDao) ic.lookup("RSVCCIGM/adminCrud/local");
	}
	
	/**
	 * Permite guardar o actulizar un objeto tecnico
	 * 
	 * @throws Exception 
	 * @autor 
	 */
	public void guardarCliente() throws Exception {
		if (cliente.getIdCliente() !=0 ) {
					adminCrud.actualizar(cliente);
		} else {
				//this.cliente.setIdCliente(adminCrud.consultarMaxCode(cliente, "idCliente"));
				adminCrud.insertar(cliente);
		}
		resetearValores();
		super.addSuccessMessage(super.getRecursoGeneral().getString("msgEditar")+" "+this.cliente.getNombre());
		this.cliente = new Cliente();
	}

	private void resetearValores(){
		setIdInst("");
	}
	/**
	 * Permite eliminar un objeto Cliente
	 * @param event
	 * @autor 
	 */
	public void eliminarCliente(ActionEvent event) {
		if (getClienteSel() != null) {
			try{
					adminCrud.eliminar(this.clienteSel);
			}catch(Exception e){
			}
		} else {

		}
	}

	/**
	 * Permite actualizar un objeto cliente
	 * @autor 
	 */
	public void editarCliente() {
		if (getClienteSel() != null) {
			super.addSuccessMessage("Cliente cargado "+this.cliente.getNombre());
			cargarCombos();
			PrimeFaceUtil.saltarTabAcordeon("form:acoPanTec", 0);
		} else {
			super.addSuccessMessage(super.getRecursoGeneral().getString("msgEditar")+" "+this.cliente.getNombre());
		}

	}

	private void cargarCombos() {
		Institucion ins = new Institucion();
		ins =(Institucion) adminCrud.buscar(new Institucion(), getClienteSel().getInstitucion().getIdInstitucion());		
		setIdInst(String.valueOf(ins.getIdInstitucion()));
		cargarInstitucion();
	}
	
	/**
	 * Selecciona un objeto Cliente de un dataTable
	 * 
	 * @param event
	 */
	public void onRowSelect(SelectEvent event) {
		setCliente((Cliente) event.getObject());
	}

	  
	public void cargarInstitucion() {
		Institucion inst = (Institucion) adminCrud.buscar(new Institucion(), Integer.parseInt(getIdInst()));
		this.cliente.setInstitucion(inst);
	}
	
	private void cargarCliente() {
		listaCliente = new ArrayList<Cliente>();
		List<Object> clienteTmp = adminCrud.consultarTodo(cliente);
		for (Object cliTmp : clienteTmp) {
			listaCliente.add((Cliente) cliTmp);
		}
	}
	
	public Boolean getPerEditar() {
		return perEditar;
	}

	public void setPerEditar(Boolean perEditar) {
		this.perEditar = perEditar;
	}

	public Boolean getPerGuardar() {
		return perGuardar;
	}

	public void setPerGuardar(Boolean perGuardar) {
		this.perGuardar = perGuardar;
	}

	public Boolean getPerEliminar() {
		return perEliminar;
	}

	public void setPerEliminar(Boolean perEliminar) {
		this.perEliminar = perEliminar;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getListaCliente() {
		cargarCliente();
		return listaCliente;
	}

	public void setListaCliente(List<Cliente> listaCliente) {
		this.listaCliente = listaCliente;
	}

	public Cliente getClienteSel() {
		return clienteSel;
	}

	public void setClienteSel(Cliente clienteSel) {
		this.clienteSel = clienteSel;
	}

	public Auditoria getAuditoria() {
		return auditoria;
	}

	public void setAuditoria(Auditoria auditoria) {
		this.auditoria = auditoria;
	}

	public Institucion getInstitucionSel() {
		return institucionSel;
	}

	public void setInstitucionSel(Institucion institucionSel) {
		this.institucionSel = institucionSel;
	}

	public void setIdInst(String idInst) {
		this.idInst = idInst;
	}

	public String getIdInst() {
		return idInst;
	}

	public void setListaInstitucionSel(List<SelectItem> listaInstitucionSel) {
		this.listaInstitucionSel = listaInstitucionSel;
	}

	public List<SelectItem> getListaInstitucionSel() {
		List<Object> institucionTmp = adminCrud.consultarTodo(new Institucion());
		this.listaInstitucionSel.clear();
		for(Object objIns : institucionTmp){
			Institucion instOri = (Institucion) objIns;
			this.listaInstitucionSel.add(new SelectItem(instOri.getIdInstitucion(),instOri.getNombre()));
		}
		return listaInstitucionSel;
	}
}
